1. Field of the Invention
The present invention relates to modulation codes, and more particularly, to techniques for reducing error propagation using modulation codes having a variable span.
2. Description of the Related Art
Writing certain bit patterns on a magnetic hard disk can increase the risk of errors. For example, long recorded data sequences of the same polarity are examples of data bit patterns that are prone to errors. These data sequences correspond to long sequences of binary zeros in the NRZ (non return-to-zero) representation, or alternatively to long sequences of binary zeros in the NRZI or PR4 representations. Another example of error prone data bit patterns are long sequences of ones in the NRZI representation. Modulation codes have been developed to remove certain error-prone patterns from bit sequences.
A modulation code encodes input sequences to prevent certain error-prone bit patterns from appearing in the output sequences. Maximum transition run (MTR) codes are one class of modulation codes that are used in conjunction with a 1/(1+D) precoder. MTR codes limit runs of certain sequences of bits. As an example, an MTR code limits the maximum number (j) of consecutive ones in an encoded stream of bits in an NRZI representation.
Modulation encoding can be performed on data using a Fibonacci code, as taught by Kautz. A Fibonacci code uses a Fibonacci base, as opposed to a traditional base consisting of powers of 2. Each element of a base of a Fibonacci code is the sum of a fixed number j+1 of the previous elements of the base, for example j+1=3. A Fibonacci code with such a base limits the maximum number of consecutive 1s to j. In other words, MTR encoding using a Fibonacci base transforms a binary sequence from a standard binary representation to a representation that limits the maximal number of consecutive 1s to j. MTR decoding reverses the encoding process to reconstruct the original input sequence using the Fibonacci base.
A span of a base represents the maximum number of consecutive errors that a single error in an encoded sequence can propagate when decoded. For example, if a Fibonacci base has a span of 10, modulation encoding and decoding using the Fibonacci base can propagate errors up to 10 consecutive bits. Thus, if one bit is in error in the encoded sequence, the error can cause up to 10 consecutive bits to be in error in the decoded sequence.
Some Fibonacci modulation codes can be used to encode two or more bytes of data at a time. For example, a Fibonacci modulation code with a code rate of 20/21 can have a span of 20 (in a worst case situation). With a span of 20, one bit in error in the encoded sequence can cause up to 20 bits in the decoded sequence to be in error. If there are 10 bits in each byte, and the modulation code has a span of 20, an error in one byte can propagate into an adjacent byte. Modulation codes that allow errors to propagate into a large number of adjacent bits can reduce the reliability of a data recording system. In particular, modulation codes that allow errors to propagate into adjacent bytes are undesirable.
However, modulation codes that have a smaller span usually have a lower code rate. High code rates are preferred in modulation encoders, because a high code rate increases the efficiency of a data recording system in terms of storage space requirements.
It would therefore be desirable to provide techniques for reducing error propagation in modulation encoders using Fibonacci modulation codes that have a limited span and a relatively high code rate.